From ef3a772ac664fd10fbf34ea6382101a7599a6c65 Mon Sep 17 00:00:00 2001 From: Jochen Sprickerhof Date: Tue, 16 Aug 2016 13:45:10 +0200 Subject: [PATCH] Imported Upstream version 1.8.0+dfsg1 --- .../include/pcl/registration/ia_kfpcs.h | 263 ---------------- .../pcl/registration/impl/ia_kfpcs.hpp | 293 ------------------ test/2d/lena-grayscale.png | Bin 42215 -> 0 bytes 3 files changed, 556 deletions(-) delete mode 100644 registration/include/pcl/registration/ia_kfpcs.h delete mode 100644 registration/include/pcl/registration/impl/ia_kfpcs.hpp delete mode 100644 test/2d/lena-grayscale.png diff --git a/registration/include/pcl/registration/ia_kfpcs.h b/registration/include/pcl/registration/ia_kfpcs.h deleted file mode 100644 index 49f7cfbe..00000000 --- a/registration/include/pcl/registration/ia_kfpcs.h +++ /dev/null @@ -1,263 +0,0 @@ -/* - * Software License Agreement (BSD License) - * - * Point Cloud Library (PCL) - www.pointclouds.org - * Copyright (c) 2014-, Open Perception, Inc. - * - * All rights reserved - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met - * - * * The use for research only (no for any commercial application). - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of the copyright holder(s) nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -#ifndef PCL_REGISTRATION_IA_KFPCS_H_ -#define PCL_REGISTRATION_IA_KFPCS_H_ - -#include - -namespace pcl -{ - namespace registration - { - /** \brief KFPCSInitialAlignment computes corresponding four point congruent sets based on keypoints - * as described in: "Markerless point cloud registration with keypoint-based 4-points congruent sets", - * Pascal Theiler, Jan Dirk Wegner, Konrad Schindler. ISPRS Annals II-5/W2, 2013. Presented at ISPRS Workshop - * Laser Scanning, Antalya, Turkey, 2013. - * \note Method has since been improved and some variations to the paper exist. - * \author P.W.Theiler - * \ingroup registration - */ - template - class KFPCSInitialAlignment : public virtual FPCSInitialAlignment - { - public: - /** \cond */ - typedef boost::shared_ptr > Ptr; - typedef boost::shared_ptr > ConstPtr; - - typedef pcl::PointCloud PointCloudSource; - typedef typename PointCloudSource::Ptr PointCloudSourcePtr; - typedef typename PointCloudSource::iterator PointCloudSourceIterator; - - typedef pcl::PointCloud PointCloudTarget; - typedef typename PointCloudTarget::Ptr PointCloudTargetPtr; - typedef typename PointCloudTarget::iterator PointCloudTargetIterator; - - typedef pcl::registration::MatchingCandidate MatchingCandidate; - typedef pcl::registration::MatchingCandidates MatchingCandidates; - /** \endcond */ - - - /** \brief Constructor. */ - KFPCSInitialAlignment (); - - /** \brief Destructor. */ - virtual ~KFPCSInitialAlignment () - {}; - - - /** \brief Set the upper translation threshold used for score evaluation. - * \param[in] upper_trl_boundary upper translation threshold - */ - inline void - setUpperTranslationThreshold (float upper_trl_boundary) - { - upper_trl_boundary_ = upper_trl_boundary; - }; - - /** \return the upper translation threshold used for score evaluation. */ - inline float - getUpperTranslationThreshold () const - { - return (upper_trl_boundary_); - }; - - - /** \brief Set the lower translation threshold used for score evaluation. - * \param[in] lower_trl_boundary lower translation threshold - */ - inline void - setLowerTranslationThreshold (float lower_trl_boundary) - { - lower_trl_boundary_ = lower_trl_boundary; - }; - - /** \return the lower translation threshold used for score evaluation. */ - inline float - getLowerTranslationThreshold () const - { - return (lower_trl_boundary_); - }; - - - /** \brief Set the weighting factor of the translation cost term. - * \param[in] lambda the weighting factor of the translation cost term - */ - inline void - setLambda (float lambda) - { - lambda_ = lambda; - }; - - /** \return the weighting factor of the translation cost term. */ - inline float - getLambda () const - { - return (lambda_); - }; - - - /** \brief Get the N best unique candidate matches according to their fitness score. - * The method only returns unique transformations comparing the translation - * and the 3D rotation to already returned transformations. - * - * \note The method may return less than N candidates, if the number of unique candidates - * is smaller than N - * - * \param[in] n number of best candidates to return - * \param[in] min_angle3d minimum 3D angle difference in radian - * \param[in] min_translation3d minimum 3D translation difference - * \param[out] candidates vector of unique candidates - */ - void - getNBestCandidates (int n, float min_angle3d, float min_translation3d, MatchingCandidates &candidates); - - /** \brief Get all unique candidate matches with fitness scores above a threshold t. - * The method only returns unique transformations comparing the translation - * and the 3D rotation to already returned transformations. - * - * \param[in] t fitness score threshold - * \param[in] min_angle3d minimum 3D angle difference in radian - * \param[in] min_translation3d minimum 3D translation difference - * \param[out] candidates vector of unique candidates - */ - void - getTBestCandidates (float t, float min_angle3d, float min_translation3d, MatchingCandidates &candidates); - - - protected: - - using PCLBase ::deinitCompute; - using PCLBase ::input_; - using PCLBase ::indices_; - - using Registration ::reg_name_; - using Registration ::tree_; - using Registration ::final_transformation_; - using Registration ::ransac_iterations_; - using Registration ::correspondences_; - using Registration ::converged_; - - using FPCSInitialAlignment ::delta_; - using FPCSInitialAlignment ::approx_overlap_; - using FPCSInitialAlignment ::max_pair_diff_; - using FPCSInitialAlignment ::max_edge_diff_; - using FPCSInitialAlignment ::coincidation_limit_; - using FPCSInitialAlignment ::max_mse_; - using FPCSInitialAlignment ::max_inlier_dist_sqr_; - using FPCSInitialAlignment ::diameter_; - using FPCSInitialAlignment ::normalize_delta_; - using FPCSInitialAlignment ::fitness_score_; - using FPCSInitialAlignment ::score_threshold_; - using FPCSInitialAlignment ::linkMatchWithBase; - using FPCSInitialAlignment ::validateMatch; - - - /** \brief Internal computation initialization. */ - virtual bool - initCompute (); - - /** \brief Method to handle current candidate matches. Here we validate and evaluate the matches w.r.t the - * base and store the sorted matches (together with score values and estimated transformations). - * - * \param[in] base_indices indices of base B - * \param[in,out] matches vector of candidate matches w.r.t the base B. The candidate matches are - * reordered during this step. - * \param[out] candidates vector which contains the candidates matches M - */ - virtual void - handleMatches ( - const std::vector &base_indices, - std::vector > &matches, - MatchingCandidates &candidates); - - /** \brief Validate the transformation by calculating the score value after transforming the input source cloud. - * The resulting score is later used as the decision criteria of the best fitting match. - * - * \param[out] transformation updated orientation matrix using all inliers - * \param[out] fitness_score current best score - * \note fitness score is only updated if the score of the current transformation exceeds the input one. - * \return - * * < 0 if previous result is better than the current one (score remains) - * * = 0 current result is better than the previous one (score updated) - */ - virtual int - validateTransformation (Eigen::Matrix4f &transformation, float &fitness_score); - - /** \brief Final computation of best match out of vector of matches. To avoid cross thread dependencies - * during parallel running, a best match for each try was calculated. - * \note For forwards compatibility the candidates are stored in vectors of 'vectors of size 1'. - * \param[in] candidates vector of candidate matches - */ - virtual void - finalCompute (const std::vector &candidates); - - - /** \brief Lower boundary for translation costs calculation. - * \note If not set by the user, the translation costs are not used during evaluation. - */ - float lower_trl_boundary_; - - /** \brief Upper boundary for translation costs calculation. - * \note If not set by the user, it is calculated from the estimated overlap and the diameter - * of the point cloud. - */ - float upper_trl_boundary_; - - /** \brief Weighting factor for translation costs (standard = 0.5). */ - float lambda_; - - - /** \brief Container for resulting vector of registration candidates. */ - MatchingCandidates candidates_; - - /** \brief Flag if translation score should be used in validation (internal calculation). */ - bool use_trl_score_; - - /** \brief Subset of input indices on which we evaluate candidates. - * To speed up the evaluation, we only use a fix number of indices defined during initialization. - */ - pcl::IndicesPtr indices_validation_; - - }; - }; // namespace registration -}; // namespace pcl - -#include - -#endif // PCL_REGISTRATION_IA_KFPCS_H_ diff --git a/registration/include/pcl/registration/impl/ia_kfpcs.hpp b/registration/include/pcl/registration/impl/ia_kfpcs.hpp deleted file mode 100644 index 4b4ca3cc..00000000 --- a/registration/include/pcl/registration/impl/ia_kfpcs.hpp +++ /dev/null @@ -1,293 +0,0 @@ -/* - * Software License Agreement (BSD License) - * - * Point Cloud Library (PCL) - www.pointclouds.org - * Copyright (c) 2014-, Open Perception, Inc. - * - * All rights reserved - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met - * - * * The use for research only (no for any commercial application). - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of the copyright holder(s) nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ - -#ifndef PCL_REGISTRATION_IMPL_IA_KFPCS_H_ -#define PCL_REGISTRATION_IMPL_IA_KFPCS_H_ - -/////////////////////////////////////////////////////////////////////////////////////////// -template -pcl::registration::KFPCSInitialAlignment ::KFPCSInitialAlignment () : - lower_trl_boundary_ (-1.f), - upper_trl_boundary_ (-1.f), - lambda_ (0.5f), - candidates_ (), - use_trl_score_ (false), - indices_validation_ (new std::vector ) -{ - reg_name_ = "pcl::registration::KFPCSInitialAlignment"; -} - - -/////////////////////////////////////////////////////////////////////////////////////////// -template bool -pcl::registration::KFPCSInitialAlignment ::initCompute () -{ - // due to sparse keypoint cloud, do not normalize delta with estimated point density - if (normalize_delta_) - { - PCL_WARN ("[%s::initCompute] Delta should be set according to keypoint precision! Normalization according to point cloud density is ignored.", reg_name_.c_str ()); - normalize_delta_ = false; - } - - // initialize as in fpcs - pcl::registration::FPCSInitialAlignment ::initCompute (); - - // set the threshold values with respect to keypoint charactersitics - max_pair_diff_ = delta_ * 1.414f; // diff between 2 points of delta_ accuracy - coincidation_limit_ = delta_ * 2.828f; // diff between diff of 2 points - max_edge_diff_ = delta_ * 3.f; // diff between 2 points + some inaccuracy due to quadruple orientation - max_mse_ = powf (delta_ * 4.f, 2.f); // diff between 2 points + some registration inaccuracy - max_inlier_dist_sqr_ = powf (delta_ * 8.f, 2.f); // set rel. high, because MSAC is used (residual based score function) - - // check use of translation costs and calculate upper boundary if not set by user - if (upper_trl_boundary_ < 0) - upper_trl_boundary_ = diameter_ * (1.f - approx_overlap_) * 0.5f; - - if (!(lower_trl_boundary_ < 0) && upper_trl_boundary_ > lower_trl_boundary_) - use_trl_score_ = true; - else - lambda_ = 0.f; - - // generate a subset of indices of size ransac_iterations_ on which to evaluate candidates on - std::size_t nr_indices = indices_->size (); - if (nr_indices < ransac_iterations_) - indices_validation_ = indices_; - else - for (int i = 0; i < ransac_iterations_; i++) - indices_validation_->push_back ((*indices_)[rand () % nr_indices]); - - return (true); -} - - -/////////////////////////////////////////////////////////////////////////////////////////// -template void -pcl::registration::KFPCSInitialAlignment ::handleMatches ( - const std::vector &base_indices, - std::vector > &matches, - MatchingCandidates &candidates) -{ - candidates.clear (); - float fitness_score = FLT_MAX; - - // loop over all Candidate matches - for (std::vector >::iterator match_indices = matches.begin (), it_e = matches.end (); match_indices != it_e; match_indices++) - { - Eigen::Matrix4f transformation_temp; - pcl::Correspondences correspondences_temp; - fitness_score = FLT_MAX; // reset to FLT_MAX to accept all candidates and not only best - - // determine corresondences between base and match according to their distance to centroid - linkMatchWithBase (base_indices, *match_indices, correspondences_temp); - - // check match based on residuals of the corresponding points after transformation - if (validateMatch (base_indices, *match_indices, correspondences_temp, transformation_temp) < 0) - continue; - - // check resulting transformation using a sub sample of the source point cloud - // all candidates are stored and later sorted according to their fitness score - validateTransformation (transformation_temp, fitness_score); - - // store all valid match as well as associated score and transformation - candidates.push_back (MatchingCandidate (fitness_score, correspondences_temp, transformation_temp)); - } -} - - -/////////////////////////////////////////////////////////////////////////////////////////// -template int -pcl::registration::KFPCSInitialAlignment ::validateTransformation ( - Eigen::Matrix4f &transformation, - float &fitness_score) -{ - // transform sub sampled source cloud - PointCloudSource source_transformed; - pcl::transformPointCloud (*input_, *indices_validation_, source_transformed, transformation); - - const std::size_t nr_points = source_transformed.size (); - float score_a = 0.f, score_b = 0.f; - - // residual costs based on mse - std::vector ids; - std::vector dists_sqr; - for (PointCloudSourceIterator it = source_transformed.begin (), it_e = source_transformed.end (); it != it_e; ++it) - { - // search for nearest point using kd tree search - tree_->nearestKSearch (*it, 1, ids, dists_sqr); - score_a += (dists_sqr[0] < max_inlier_dist_sqr_ ? dists_sqr[0] : max_inlier_dist_sqr_); // MSAC - } - - score_a /= (max_inlier_dist_sqr_ * nr_points); // MSAC - //score_a = 1.f - (1.f - score_a) / (1.f - approx_overlap_); // make score relative to estimated overlap - - // translation score (solutions with small translation are down-voted) - float scale = 1.f; - if (use_trl_score_) - { - float trl = transformation.rightCols <1> ().head (3).norm (); - float trl_ratio = (trl - lower_trl_boundary_) / (upper_trl_boundary_ - lower_trl_boundary_); - - score_b = (trl_ratio < 0.f ? 1.f : (trl_ratio > 1.f ? 0.f : 0.5f * sin (M_PI * trl_ratio + M_PI_2) + 0.5f)); // sinusoidal costs - scale += lambda_; - } - - // calculate the fitness and return unsuccessfull if smaller than previous ones - float fitness_score_temp = (score_a + lambda_ * score_b) / scale; - if (fitness_score_temp > fitness_score) - return (-1); - - fitness_score = fitness_score_temp; - return (0); -} - - -/////////////////////////////////////////////////////////////////////////////////////////// -template void -pcl::registration::KFPCSInitialAlignment ::finalCompute ( - const std::vector &candidates) -{ - // reorganize candidates into single vector - size_t total_size = 0; - std::vector ::const_iterator it, it_e = candidates.end (); - for (it = candidates.begin (); it != it_e; it++) - total_size += it->size (); - - candidates_.clear (); - candidates_.reserve (total_size); - - MatchingCandidates::const_iterator it_curr, it_curr_e; - for (it = candidates.begin (); it != it_e; it++) - for (it_curr = it->begin (), it_curr_e = it->end (); it_curr != it_curr_e; it_curr++) - candidates_.push_back (*it_curr); - - // sort acoording to score value - std::sort (candidates_.begin (), candidates_.end (), by_score ()); - - // return here if no score was valid, i.e. all scores are FLT_MAX - if (candidates_[0].fitness_score == FLT_MAX) - { - converged_ = false; - return; - } - - // save best candidate as output result - // note, all other candidates are accessible via getNBestCandidates () and getTBestCandidates () - fitness_score_ = candidates_ [0].fitness_score; - final_transformation_ = candidates_ [0].transformation; - *correspondences_ = candidates_ [0].correspondences; - - // here we define convergence if resulting score is above threshold - converged_ = fitness_score_ < score_threshold_; -} - -/////////////////////////////////////////////////////////////////////////////////////////// -template void -pcl::registration::KFPCSInitialAlignment ::getNBestCandidates ( - int n, - float min_angle3d, - float min_translation3d, - MatchingCandidates &candidates) -{ - candidates.clear (); - - // loop over all candidates starting from the best one - for (MatchingCandidates::iterator it_candidate = candidates_.begin (), it_e = candidates_.end (); it_candidate != it_e; it_candidate++) - { - // stop if current candidate has no valid score - if (it_candidate->fitness_score == FLT_MAX) - return; - - // check if current candidate is a unique one compared to previous using the min_diff threshold - bool unique = true; - MatchingCandidates::iterator it = candidates.begin (), it_e2 = candidates.end (); - while (unique && it != it_e2) - { - Eigen::Matrix4f diff = it_candidate->transformation.colPivHouseholderQr ().solve (it->transformation); - const float angle3d = Eigen::AngleAxisf (diff.block <3, 3> (0, 0)).angle (); - const float translation3d = diff.block <3, 1> (0, 3).norm (); - unique = angle3d > min_angle3d && translation3d > min_translation3d; - it++; - } - - // add candidate to best candidates - if (unique) - candidates.push_back (*it_candidate); - - // stop if n candidates are reached - if (candidates.size () == n) - return; - } -} - -/////////////////////////////////////////////////////////////////////////////////////////// -template void -pcl::registration::KFPCSInitialAlignment ::getTBestCandidates ( - float t, - float min_angle3d, - float min_translation3d, - MatchingCandidates &candidates) -{ - candidates.clear (); - - // loop over all candidates starting from the best one - for (MatchingCandidates::iterator it_candidate = candidates_.begin (), it_e = candidates_.end (); it_candidate != it_e; it_candidate++) - { - // stop if current candidate has score below threshold - if (it_candidate->fitness_score > t) - return; - - // check if current candidate is a unique one compared to previous using the min_diff threshold - bool unique = true; - MatchingCandidates::iterator it = candidates.begin (), it_e2 = candidates.end (); - while (unique && it != it_e2) - { - Eigen::Matrix4f diff = it_candidate->transformation.colPivHouseholderQr ().solve (it->transformation); - const float angle3d = Eigen::AngleAxisf (diff.block <3, 3> (0, 0)).angle (); - const float translation3d = diff.block <3, 1> (0, 3).norm (); - unique = angle3d > min_angle3d && translation3d > min_translation3d; - it++; - } - - // add candidate to best candidates - if (unique) - candidates.push_back (*it_candidate); - } -} - -/////////////////////////////////////////////////////////////////////////////////////////// - -#endif // PCL_REGISTRATION_IMPL_IA_KFPCS_H_ diff --git a/test/2d/lena-grayscale.png b/test/2d/lena-grayscale.png deleted file mode 100644 index 9ac73d825dcaed20283001e3bb28a9d5a26fae31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42215 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 vVwDumNxdF;DYlGX-9K_Wo61O&3$o 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�uQNdP_- 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 LNkvXXu0mjfr6~>b -- 2.30.2